home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / pd / netz / term / extras / source / gtlayout-source.lha / LT_Fixed.c < prev    next >
C/C++ Source or Header  |  1995-03-25  |  1KB  |  86 lines

  1. /*  GadTools layout toolkit
  2. **
  3. **  Copyright © 1993-1995 by Olaf `Olsen' Barthel
  4. **  Freely distributable.
  5. */
  6.  
  7. #include "gtlayout_global.h"
  8.  
  9. #ifdef DO_FRACTION_KIND
  10. VOID LIBENT
  11. LT_Fixed2String(REG(d0) FIXED fixed,REG(d1) STRPTR buffer)
  12. {
  13.     sprintf(buffer,"%ld%lc%ld",fixed / FIXED_UNITY,LTP_Locale ? LTP_Locale -> loc_DecimalPoint[0] : '.',fixed % FIXED_UNITY);
  14. }
  15. #endif
  16.  
  17.  
  18. /*****************************************************************************/
  19.  
  20.  
  21. #ifdef DO_FRACTION_KIND
  22.  
  23. FIXED LIBENT
  24. LT_String2Fixed(REG(a0) STRPTR buffer)
  25. {
  26.     UBYTE    localBuffer[20];
  27.     UBYTE    decimalPoint;
  28.     LONG    i,left,right;
  29.  
  30.     if(LTP_Locale)
  31.         decimalPoint = LTP_Locale -> loc_DecimalPoint[0];
  32.     else
  33.         decimalPoint = '.';
  34.  
  35.     strcpy(localBuffer,buffer);
  36.  
  37.     i = 0;
  38.  
  39.     while(buffer[i])
  40.     {
  41.         if(localBuffer[i] == decimalPoint)
  42.         {
  43.             localBuffer[i] = 0;
  44.  
  45.             if(i)
  46.                 left = LTP_Atol(localBuffer);
  47.             else
  48.                 left = 0;
  49.  
  50.             if(localBuffer[i + 1])
  51.             {
  52.                 UBYTE rest[4];
  53.  
  54.                 CopyMem(&localBuffer[i + 1],rest,3);
  55.  
  56.                 rest[3] = 0;
  57.  
  58.                 right = LTP_Atol(rest);
  59.             }
  60.             else
  61.                 right = 0;
  62.  
  63.             return((FIXED)(left * FIXED_UNITY + right));
  64.         }
  65.  
  66.         i++;
  67.     }
  68.  
  69.     left = LTP_Atol(localBuffer);
  70.  
  71.     return((FIXED)(left * FIXED_UNITY));
  72. }
  73. #endif
  74.  
  75.  
  76. /*****************************************************************************/
  77.  
  78.  
  79. #ifdef DO_FRACTION_KIND
  80. ULONG LIBENT
  81. LT_FixedMult(REG(d0) FIXED fixed,REG(d1) ULONG factor)
  82. {
  83.     return((fixed * factor) / FIXED_UNITY);
  84. }
  85. #endif
  86.